//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// MAC_Structures.h
//
// This file contains the definitions and data structures used by SW-MAC.
//
// Revision Histoy
//=================
// 0.1      2002        UN00
// 0.2      20021004    PD43 CCLiu6
//          20021018    PD43 CCLiu6
//                      Add enum_TxRate type
//                      Modify enum_STAState type
// 0.3      20021023    PE23 CYLiu update MAC session struct
//          20021108
//          20021122    PD43 Austin
//                      Deleted some unused.
//          20021129    PD43 Austin
//			20030617	increase the 802.11g definition
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#ifndef _MAC_Structures_H_
#define _MAC_Structures_H_


//=========================================================
// Some miscellaneous definitions
//-----
#define MAX_CHANNELS                        30
#define MAC_ADDR_LENGTH                     6
#define MAX_WEP_KEY_SIZE                    16  // 128 bits
#define	MAX_802_11_FRAGMENT_NUMBER		10 // By spec

//========================================================
// 802.11 Frame define
//-----
#define MASK_PROTOCOL_VERSION_TYPE	0x0F
#define MASK_FRAGMENT_NUMBER		0x000F
#define SEQUENCE_NUMBER_SHIFT		4
#define DIFFER_11_TO_3				18
#define DOT_11_MAC_HEADER_SIZE		24
#define DOT_11_SNAP_SIZE			6
#define DOT_11_DURATION_OFFSET		2
#define DOT_11_SEQUENCE_OFFSET		22 //Sequence control offset
#define DOT_11_TYPE_OFFSET			30 //The start offset of 802.11 Frame//
#define DOT_11_DATA_OFFSET          24
#define DOT_11_DA_OFFSET			4
#define DOT_3_TYPE_ARP				0x80F3
#define DOT_3_TYPE_IPX				0x8137
#define DOT_3_TYPE_OFFSET			12


#define ETHERNET_HEADER_SIZE			14
#define MAX_ETHERNET_PACKET_SIZE		1514


//-----  management : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7)
#define MAC_SUBTYPE_MNGMNT_ASSOC_REQUEST    0x00
#define MAC_SUBTYPE_MNGMNT_ASSOC_RESPONSE   0x10
#define MAC_SUBTYPE_MNGMNT_REASSOC_REQUEST  0x20
#define MAC_SUBTYPE_MNGMNT_REASSOC_RESPONSE 0x30
#define MAC_SUBTYPE_MNGMNT_PROBE_REQUEST    0x40
#define MAC_SUBTYPE_MNGMNT_PROBE_RESPONSE   0x50
#define MAC_SUBTYPE_MNGMNT_BEACON           0x80
#define MAC_SUBTYPE_MNGMNT_ATIM             0x90
#define MAC_SUBTYPE_MNGMNT_DISASSOCIATION   0xA0
#define MAC_SUBTYPE_MNGMNT_AUTHENTICATION   0xB0
#define MAC_SUBTYPE_MNGMNT_DEAUTHENTICATION 0xC0

//-----  control : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7)
#define MAC_SUBTYPE_CONTROL_PSPOLL          0xA4
#define MAC_SUBTYPE_CONTROL_RTS             0xB4
#define MAC_SUBTYPE_CONTROL_CTS             0xC4
#define MAC_SUBTYPE_CONTROL_ACK             0xD4
#define MAC_SUBTYPE_CONTROL_CFEND           0xE4
#define MAC_SUBTYPE_CONTROL_CFEND_CFACK     0xF4

//-----  data : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7)
#define MAC_SUBTYPE_DATA                    0x08
#define MAC_SUBTYPE_DATA_CFACK              0x18
#define MAC_SUBTYPE_DATA_CFPOLL             0x28
#define MAC_SUBTYPE_DATA_CFACK_CFPOLL       0x38
#define MAC_SUBTYPE_DATA_NULL               0x48
#define MAC_SUBTYPE_DATA_CFACK_NULL         0x58
#define MAC_SUBTYPE_DATA_CFPOLL_NULL        0x68
#define MAC_SUBTYPE_DATA_CFACK_CFPOLL_NULL  0x78

//-----  Frame Type of Bits (2, 3)
#define MAC_TYPE_MANAGEMENT                 0x00
#define MAC_TYPE_CONTROL                    0x04
#define MAC_TYPE_DATA                       0x08

//----- definitions for Management Frame Element ID (1 BYTE)
#define ELEMENT_ID_SSID                     0
#define ELEMENT_ID_SUPPORTED_RATES          1
#define ELEMENT_ID_FH_PARAMETER_SET         2
#define ELEMENT_ID_DS_PARAMETER_SET         3
#define ELEMENT_ID_CF_PARAMETER_SET         4
#define ELEMENT_ID_TIM                      5
#define ELEMENT_ID_IBSS_PARAMETER_SET       6
// 7~15 reserverd
#define ELEMENT_ID_CHALLENGE_TEXT           16
// 17~31 reserved for challenge text extension
// 32~255 reserved
//--  11G  --
#define ELEMENT_ID_ERP_INFORMATION			42
#define ELEMENT_ID_EXTENDED_SUPPORTED_RATES 50

//--  WPA  --

#define ELEMENT_ID_RSN_WPA					221
#ifdef _WPA2_
#define ELEMENT_ID_RSN_WPA2				    48
#endif //endif WPA2

#define WLAN_MAX_PAIRWISE_CIPHER_SUITE_COUNT    ((USHORT) 6)
#define WLAN_MAX_AUTH_KEY_MGT_SUITE_LIST_COUNT  ((USHORT) 2)

#ifdef WB_LINUX
#define UNALIGNED
#endif

//========================================================
typedef enum enum_PowerManagementMode
{
    ACTIVE = 0,
    POWER_SAVE
} WB_PM_Mode, *PWB_PM_MODE;

//===================================================================
//  Reason Code (Table 18): indicate the reason of DisAssoc, DeAuthen
//  length of ReasonCode is 2 Octs.
//===================================================================
#define REASON_REASERED             0
#define REASON_UNSPECIDIED          1
#define REASON_PREAUTH_INVALID      2
#define DEAUTH_REASON_LEFT_BSS      3
#define DISASS_REASON_AP_INACTIVE   4
#define DISASS_REASON_AP_BUSY       5
#define REASON_CLASS2_FRAME_FROM_NONAUTH_STA    6
#define REASON_CLASS3_FRAME_FROM_NONASSO_STA    7
#define DISASS_REASON_LEFT_BSS      8
#define REASON_NOT_AUTH_YET         9
//802.11i define
#define REASON_INVALID_IE						13
#define REASON_MIC_ERROR						14
#define REASON_4WAY_HANDSHAKE_TIMEOUT			15
#define REASON_GROUPKEY_UPDATE_TIMEOUT			16
#define REASON_IE_DIFF_4WAY_ASSOC				17
#define REASON_INVALID_MULTICAST_CIPHER			18
#define REASON_INVALID_UNICAST_CIPHER			19
#define REASON_INVALID_AKMP						20
#define REASON_UNSUPPORTED_RSNIE_VERSION		21
#define REASON_INVALID_RSNIE_CAPABILITY			22
#define REASON_802_1X_AUTH_FAIL					23
#define	REASON_CIPHER_REJECT_PER_SEC_POLICY		14

/*
//===========================================================
// enum_MMPDUResultCode --
//   Status code (2 Octs) in the MMPDU's frame body. Table.19
//
//===========================================================
enum enum_MMPDUResultCode
{
//    SUCCESS   = 0,      // Redefined
    UNSPECIFIED_FAILURE                         = 1,

    // 2 - 9 Reserved

    NOT_SUPPROT_CAPABILITIES                    = 10,

    //REASSOCIATION_DENIED
    //
    REASSOC_DENIED_UNABLE_CFM_ASSOC_EXIST       = 11,

    //ASSOCIATION_DENIED_NOT_IN_STANDARD
    //
    ASSOC_DENIED_REASON_NOT_IN_STANDARD         = 12,
    PEER_NOT_SUPPORT_AUTH_ALGORITHM             = 13,
    AUTH_SEQNUM_OUT_OF_EXPECT                   = 14,
    AUTH_REJECT_REASON_CHALLENGE_FAIL           = 15,
    AUTH_REJECT_REASON_WAIT_TIMEOUT             = 16,
    ASSOC_DENIED_REASON_AP_BUSY                 = 17,
    ASSOC_DENIED_REASON_NOT_SUPPORT_BASIC_RATE  = 18
} WB_MMPDURESULTCODE, *PWB_MMPDURESULTCODE;
*/

//===========================================================
// enum_TxRate --
//   Define the transmission constants based on W89C32 MAC
//   target specification.
//===========================================================
typedef enum enum_TxRate
{
    TXRATE_1M               = 0,
    TXRATE_2MLONG           = 2,
    TXRATE_2MSHORT          = 3,
    TXRATE_55MLONG          = 4,
    TXRATE_55MSHORT         = 5,
    TXRATE_11MLONG          = 6,
    TXRATE_11MSHORT         = 7,
    TXRATE_AUTO             = 255           // PD43 20021108
} WB_TXRATE, *PWB_TXRATE;


#define	RATE_BITMAP_1M				1
#define	RATE_BITMAP_2M				2
#define	RATE_BITMAP_5dot5M			5
#define RATE_BITMAP_6M				6
#define RATE_BITMAP_9M				9
#define RATE_BITMAP_11M				11
#define RATE_BITMAP_12M				12
#define RATE_BITMAP_18M				18
#define RATE_BITMAP_22M				22
#define RATE_BITMAP_24M				24
#define RATE_BITMAP_33M				17
#define RATE_BITMAP_36M				19
#define RATE_BITMAP_48M				25
#define RATE_BITMAP_54M				28

#define RATE_AUTO					0
#define RATE_1M						2
#define RATE_2M						4
#define RATE_5dot5M					11
#define RATE_6M						12
#define RATE_9M						18
#define RATE_11M					22
#define RATE_12M					24
#define RATE_18M					36
#define RATE_22M					44
#define RATE_24M					48
#define RATE_33M					66
#define RATE_36M					72
#define RATE_48M					96
#define RATE_54M					108
#define RATE_MAX					255

//CAPABILITY
#define CAPABILITY_ESS_BIT				0x0001
#define CAPABILITY_IBSS_BIT				0x0002
#define CAPABILITY_CF_POLL_BIT			0x0004
#define CAPABILITY_CF_POLL_REQ_BIT		0x0008
#define CAPABILITY_PRIVACY_BIT			0x0010
#define CAPABILITY_SHORT_PREAMBLE_BIT	0x0020
#define CAPABILITY_PBCC_BIT				0x0040
#define CAPABILITY_CHAN_AGILITY_BIT		0x0080
#define CAPABILITY_SHORT_SLOT_TIME_BIT	0x0400
#define CAPABILITY_DSSS_OFDM_BIT		0x2000


struct Capability_Information_Element
{
  union
  {
  	USHORT __ALIGN_PACK__ wValue;
    #ifdef _BIG_ENDIAN_  //20060926 add by anson's endian
    struct _Capability
    {
        //--  11G  --
	UCHAR	Reserved3 : 2;
	UCHAR	DSSS_OFDM : 1;
	UCHAR	Reserved2 : 2;
	UCHAR	Short_Slot_Time : 1;
	UCHAR    Reserved1 : 2;
	UCHAR    Channel_Agility : 1;
	UCHAR    PBCC : 1;
	UCHAR    ShortPreamble : 1;
	UCHAR    CF_Privacy : 1;
	UCHAR    CF_Poll_Request : 1;
	UCHAR    CF_Pollable : 1;
	UCHAR    IBSS : 1;
	UCHAR    ESS : 1;
    } __ALIGN_PACK__ Capability;	
    #else
    struct _Capability
    {
        UCHAR    ESS : 1;
        UCHAR    IBSS : 1;
        UCHAR    CF_Pollable : 1;
        UCHAR    CF_Poll_Request : 1;
        UCHAR    CF_Privacy : 1;
        UCHAR    ShortPreamble : 1;
        UCHAR    PBCC : 1;
        UCHAR    Channel_Agility : 1;
        UCHAR    Reserved1 : 2;
		//--  11G  --
		UCHAR	Short_Slot_Time : 1;
		UCHAR	Reserved2 : 2;
		UCHAR	DSSS_OFDM : 1;
		UCHAR	Reserved3 : 2;
    } __ALIGN_PACK__ Capability;	
    #endif
  }__ALIGN_PACK__ ;
}__ALIGN_PACK__;

struct FH_Parameter_Set_Element
{
    UCHAR    Element_ID;
    UCHAR    Length;
    UCHAR    Dwell_Time[2];
    UCHAR    Hop_Set;
    UCHAR    Hop_Pattern;
    UCHAR    Hop_Index;
};

struct DS_Parameter_Set_Element
{
    UCHAR    Element_ID;
    UCHAR    Length;
    UCHAR    Current_Channel;
};

struct Supported_Rates_Element
{
    UCHAR    Element_ID;
    UCHAR    Length;
    UCHAR    SupportedRates[8];
}__ALIGN_PACK__;

struct SSID_Element
{
    UCHAR    Element_ID;
    UCHAR    Length;
    UCHAR    SSID[32];
}__ALIGN_PACK__ ;

struct CF_Parameter_Set_Element
{
    UCHAR    Element_ID;
    UCHAR    Length;
    UCHAR    CFP_Count;
    UCHAR    CFP_Period;
    UCHAR    CFP_MaxDuration[2];     // in Time Units
    UCHAR    CFP_DurRemaining[2];    // in time units
};

struct TIM_Element
{
    UCHAR    Element_ID;
    UCHAR    Length;
    UCHAR    DTIM_Count;
    UCHAR    DTIM_Period;
    UCHAR    Bitmap_Control;
    UCHAR    Partial_Virtual_Bitmap[251];
};

struct IBSS_Parameter_Set_Element
{
    UCHAR    Element_ID;
    UCHAR    Length;
    UCHAR    ATIM_Window[2];
};

struct Challenge_Text_Element
{
    UCHAR    Element_ID;
    UCHAR    Length;
    UCHAR    Challenge_Text[253];
};

struct PHY_Parameter_Set_Element
{
//  int     aSlotTime;
//  int     aSifsTime;
    INT     aCCATime;
    INT     aRxTxTurnaroundTime;
    INT     aTxPLCPDelay;
    INT     RxPLCPDelay;
    INT     aRxTxSwitchTime;
    INT     aTxRampOntime;
    INT     aTxRampOffTime;
    INT     aTxRFDelay;
    INT     aRxRFDelay;
    INT     aAirPropagationTime;
    INT     aMACProcessingDelay;
    INT     aPreambleLength;
    INT     aPLCPHeaderLength;
    INT     aMPDUDurationFactor;
    INT     aMPDUMaxLength;
//  int     aCWmin;
//  int     aCWmax;
};

//--  11G  --
struct ERP_Information_Element
{
    UCHAR	Element_ID;
    UCHAR	Length;
    #ifdef _BIG_ENDIAN_ //20060926 add by anson's endian
    	UCHAR	Reserved:5;   //20060926 add by anson
       UCHAR	Barker_Preamble_Mode:1;
	UCHAR	Use_Protection:1;
       UCHAR	NonERP_Present:1;	
    #else 
	UCHAR	NonERP_Present:1;
	UCHAR	Use_Protection:1;
	UCHAR	Barker_Preamble_Mode:1;
	UCHAR	Reserved:5;
    #endif
};

struct Extended_Supported_Rates_Element
{
    UCHAR	Element_ID;
    UCHAR	Length;
    UCHAR	ExtendedSupportedRates[255];
}__ALIGN_PACK__;

//WPA(802.11i draft 3.0)
#define VERSION_WPA				1
#ifdef _WPA2_
#define VERSION_WPA2            1
#endif //end def  _WPA2_
#define OUI_WPA					0x00F25000	//WPA2.0 OUI=00:50:F2, the MSB is reserved for suite type
#ifdef _WPA2_
#define OUI_WPA2				0x00AC0F00	// for wpa2 change to 0x00ACOF04 by Ws 26/04/04
#endif //end def _WPA2_ 

#define OUI_WPA_ADDITIONAL		0x01
#define WLAN_MIN_RSN_WPA_LENGTH                 6 //added by ws 09/10/04
#ifdef _WPA2_
#define WLAN_MIN_RSN_WPA2_LENGTH                2 // Fix to 2 09/14/05
#endif //end def _WPA2_

#define oui_wpa                  (ULONG)(OUI_WPA|OUI_WPA_ADDITIONAL)

#define WPA_OUI_BIG    ((ULONG) 0x01F25000)//added by ws 09/23/04
#define WPA_OUI_LITTLE  ((ULONG) 0x01F25001)//added by ws 09/23/04

#define WPA_WPS_OUI				cpu_to_le32(0x04F25000) // 20061108 For WPS. It's little endian. Big endian is 0x0050F204

//-----WPA2-----
#ifdef _WPA2_
#define WPA2_OUI_BIG    ((ULONG)0x01AC0F00)
#define WPA2_OUI_LITTLE ((ULONG)0x01AC0F01)
#endif //end def _WPA2_

//Authentication suite
#define OUI_AUTH_WPA_NONE           0x00 //for WPA_NONE
#define OUI_AUTH_8021X				0x01
#define OUI_AUTH_PSK				0x02
//Cipher suite
#define OUI_CIPHER_GROUP_KEY        0x00  //added by ws 05/21/04
#define OUI_CIPHER_WEP_40			0x01
#define OUI_CIPHER_TKIP				0x02
#define OUI_CIPHER_CCMP				0x04
#define OUI_CIPHER_WEP_104			0x05

typedef struct _SUITE_SELECTOR_
{
	union
	{
		UCHAR	Value[4];
		struct _SUIT_
		{
			UCHAR	OUI[3];
			UCHAR	Type;
		}SuitSelector;
	};
}SUITE_SELECTOR;

//--  WPA  --
struct	RSN_Information_Element
{
	UCHAR					Element_ID;
	UCHAR					Length;
	UNALIGNED SUITE_SELECTOR	OuiWPAAdditional;//WPA version 2.0 additional field, and should be 00:50:F2:01
	USHORT					Version;
	SUITE_SELECTOR		GroupKeySuite;
	USHORT					PairwiseKeySuiteCount;
	SUITE_SELECTOR		PairwiseKeySuite[1];
}__ALIGN_PACK__;
struct RSN_Auth_Sub_Information_Element
{
	USHORT				AuthKeyMngtSuiteCount;
	SUITE_SELECTOR	AuthKeyMngtSuite[1];
}__ALIGN_PACK__;

//--  WPA2  --
struct RSN_Capability_Element
{
  union
  {
	USHORT	__ALIGN_PACK__	wValue;
    #ifdef _BIG_ENDIAN_	 //20060927 add by anson's endian
    struct _RSN_Capability
    {
    	USHORT   __ALIGN_PACK__  Reserved2 : 8; // 20051201
	USHORT   __ALIGN_PACK__  Reserved1 : 2;
	USHORT   __ALIGN_PACK__  GTK_Replay_Counter : 2;
	USHORT   __ALIGN_PACK__  PTK_Replay_Counter : 2;
	USHORT   __ALIGN_PACK__  No_Pairwise : 1;
        USHORT   __ALIGN_PACK__  Pre_Auth : 1;
    }__ALIGN_PACK__  RSN_Capability;
    #else
    struct _RSN_Capability
    {
        USHORT   __ALIGN_PACK__  Pre_Auth : 1;
        USHORT   __ALIGN_PACK__  No_Pairwise : 1;
        USHORT   __ALIGN_PACK__  PTK_Replay_Counter : 2;
	    USHORT   __ALIGN_PACK__  GTK_Replay_Counter : 2;
	    USHORT   __ALIGN_PACK__  Reserved1 : 2;
	    USHORT   __ALIGN_PACK__  Reserved2 : 8; // 20051201
    }__ALIGN_PACK__  RSN_Capability;
    #endif

  }__ALIGN_PACK__ ;
}__ALIGN_PACK__ ;

#ifdef _WPA2_
typedef struct _PMKID 
{
  UCHAR pValue[16];  
}PMKID;

struct	WPA2_RSN_Information_Element
{
	UCHAR					Element_ID;
	UCHAR					Length;
	USHORT					Version;
	SUITE_SELECTOR		GroupKeySuite;
	USHORT					PairwiseKeySuiteCount;
	SUITE_SELECTOR		PairwiseKeySuite[1];

}__ALIGN_PACK__;

struct WPA2_RSN_Auth_Sub_Information_Element
{
	USHORT				AuthKeyMngtSuiteCount;
	SUITE_SELECTOR	AuthKeyMngtSuite[1];
}__ALIGN_PACK__;


struct PMKID_Information_Element
{
	USHORT				PMKID_Count;
	PMKID pmkid [16] ;
}__ALIGN_PACK__;

#endif //enddef _WPA2_
//============================================================
// MAC Frame structure (different type) and subfield structure
//============================================================
struct MAC_frame_control
{
    UCHAR    mac_frame_info; // a combination of the [Protocol Version, Control Type, Control Subtype]
    #ifdef _BIG_ENDIAN_ //20060927 add by anson's endian
    UCHAR    order:1;
    UCHAR    WEP:1;
    UCHAR    more_data:1;
    UCHAR    pwr_mgt:1;
    UCHAR    retry:1;
    UCHAR    more_frag:1;
    UCHAR    from_ds:1;
    UCHAR    to_ds:1;
    #else
    UCHAR    to_ds:1;
    UCHAR    from_ds:1;
    UCHAR    more_frag:1;
    UCHAR    retry:1;
    UCHAR    pwr_mgt:1;
    UCHAR    more_data:1;
    UCHAR    WEP:1;
    UCHAR    order:1;
    #endif
} __ALIGN_PACK__;

struct Management_Frame {
    struct MAC_frame_control frame_control; // 2B, ToDS,FromDS,MoreFrag,MoreData,Order=0
    USHORT		duration;
    UCHAR		DA[MAC_ADDR_LENGTH];			// Addr1
    UCHAR		SA[MAC_ADDR_LENGTH];			// Addr2
    UCHAR		BSSID[MAC_ADDR_LENGTH];			// Addr3
    USHORT		Sequence_Control;
    // Management Frame Body <= 325 bytes
    // FCS 4 bytes
}__ALIGN_PACK__;

// SW-MAC don't Tx/Rx Control-Frame, HW-MAC do it.
struct Control_Frame {
    struct MAC_frame_control frame_control; // ToDS,FromDS,MoreFrag,Retry,MoreData,WEP,Order=0
    USHORT		duration;
    UCHAR		RA[MAC_ADDR_LENGTH];
    UCHAR		TA[MAC_ADDR_LENGTH];
    USHORT		FCS;
}__ALIGN_PACK__;

struct Data_Frame {
    struct MAC_frame_control frame_control;
    USHORT		duration;
    UCHAR		Addr1[MAC_ADDR_LENGTH];
    UCHAR		Addr2[MAC_ADDR_LENGTH];
    UCHAR		Addr3[MAC_ADDR_LENGTH];
    USHORT		Sequence_Control;
    UCHAR		Addr4[MAC_ADDR_LENGTH]; // only exist when ToDS=FromDS=1
    // Data Frame Body <= 2312
    // FCS
}__ALIGN_PACK__;

struct Disassociation_Frame_Body
{
    USHORT    reasonCode;
}__ALIGN_PACK__;

struct Association_Request_Frame_Body
{
    USHORT    capability_information;
    USHORT    listenInterval;
    UCHAR     Current_AP_Address[MAC_ADDR_LENGTH];//for reassociation only
    // SSID (2+32 bytes)
    // Supported_Rates (2+8 bytes)
}__ALIGN_PACK__;

struct Association_Response_Frame_Body
{
    USHORT    capability_information;
    USHORT    statusCode;
    USHORT    Association_ID;
    struct Supported_Rates_Element supportedRates;
}__ALIGN_PACK__;

/*struct Reassociation_Request_Frame_Body
{
    USHORT    capability_information;
    USHORT    listenInterval;
    UCHAR     Current_AP_Address[MAC_ADDR_LENGTH];
    // SSID (2+32 bytes)
    // Supported_Rates (2+8 bytes)
};*/
// eliminated by WS 07/22/04 comboined with associateion request frame.

struct Reassociation_Response_Frame_Body
{
    USHORT    capability_information;
    USHORT    statusCode;
    USHORT    Association_ID;
    struct Supported_Rates_Element supportedRates;
}__ALIGN_PACK__;

struct Deauthentication_Frame_Body
{
    USHORT    reasonCode;
}__ALIGN_PACK__;


struct Probe_Response_Frame_Body
{
    USHORT    Timestamp;
    USHORT    Beacon_Interval;
    USHORT    Capability_Information;
    // SSID
    // Supported_Rates
    // PHY parameter Set (DS Parameters)
    // CF parameter Set
    // IBSS parameter Set
}__ALIGN_PACK__;

struct Authentication_Frame_Body
{
    USHORT    algorithmNumber;
    USHORT    sequenceNumber;
    USHORT    statusCode;
    // NB: don't include ChallengeText in this structure
	// struct Challenge_Text_Element sChallengeTextElement; // wkchen added
}__ALIGN_PACK__;


#endif // _MAC_Structure_H_


